package com.method.demo;

/**
 * @Author create by xcb 2023/1/29 10:55
 * 抽象类中的抽象方法（其前有abstract修饰）不能用private、static、synchronized、native访问修饰符修饰。原因
 * 如下：抽象方法没有方法体，是用来被继承的，所以不能用private修饰；static修饰的方法可以通过类名来访问该方法（即
 * 该方法的方法体），抽象方法用static修饰没有意义；使用synchronized关键字是为该方法加一个锁。。而如果该关键字修
 * 饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象
 * ，因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能
 * 用synchronized关键字修饰了；native，这个东西本身就和abstract冲突，他们都是方法的声明，只是一个吧
 * 方法实现移交给子类，另一个是移交给本地操作系统。如果同时出现，就相当于即把实现移交给子类，又把实现移交
 * 给本地操作系统，那到底谁来实现具体方法呢？
 */
public class AbstractDemo implements InterfaceDemo {

    /**
     * 抽象类可以有构造方法
     */
    AbstractDemo() {

    }

    @Override
    public void interfaceDemo() {

    }

    @Override
    public void getInfo() {

    }

    @Override
    public void getInfo(String type) {

    }

    /**
     * 1.8之后支持default修饰方法，且子类不需要实现
     */
    void getAbstractInfo() {
        System.out.println("default");
    }

    /**
     * 接口方法的修饰符默认为 public abstract ,省略不写
     *
     * @param type
     */
    void getAbstractInfo(String type) {

    }
}
